---@class SBaseAttribute
local BaseAttribute = ClientFight.CreateClass("BaseAttribute")

---@param attribute SBaseAttribute
function BaseAttribute:ctor(attribute)
    self.attributes = {};
    if attribute then
        if attribute.attributes then
            table.addRange(self.attributes, attribute.attributes)
        else
            table.addRange(self.attributes, attribute)
        end
    end
end

function BaseAttribute:changeAttribute(attrType, change)
    local oldValue = self.attributes[attrType] or 0
    self.attributes[attrType] = oldValue + change
end

function BaseAttribute:add(type, value)
    if (value == 0) then
        return ;
    end
    local oldValue = attributes[type] or 0;
    oldValue = oldValue + value;
    self.attributes[type] = oldValue;
end

function BaseAttribute:put(type, value)
    if (value == 0) then
        return ;
    end
    self.attributes[type] = value;
end

function BaseAttribute:print()
    local str = "attr["
    for k, v in pairs(self.attributes) do
        if v ~= 0 then
            str = str .. k .. "=" .. v .. ","
        end
    end
    str = str .. "]"
    return str
end
BaseAttribute.empty = BaseAttribute.New()
